package com.example.java.test;


/**
 * 描述：NASA 的 10 大编程规则
 * @author Ay
 * @date   2017-11-10
 */
public class NASA_10_Code_Principles {

    /*
    美国宇航局（National Aeronautics and Space Administration，缩写为 NASA）是美国联邦政府的一个独立机构，
    负责制定、实施美国的民用太空计划、与开展航空科学暨太空科学的研究。在太空计划之外，美国国家航空航天局还进行长期的民用以及军用航空航天研究。
    在普通人的眼中，NASA 是一个很“高级”的机构，其成员包含大量不同领域的科学家和研究人员。与其他任何组织机构类似，NASA 的日常工作，
    以及所执行的几乎全部项目也离不开计算机的辅助，出于需求的特殊性和重要性，他们所使用的很多计算机软件都是内部自行开发的，在一些重要项目的关键领域发挥着作用。
    去年，一位前 NASA 实习生把美国阿波罗登月项目的 11 号计算机 --- 阿波罗导航计算机 (Apollo Guidance Computer) 系统源代码上传到了 GitHub，此举在开发者群体中引起了极大的热议。

    */

    public static void main(String[] args) {


   /*
       原则1 – 简化控制流程（Simple Control Flow）
       用非常简单的控制流结构体来编写程序 — 不要用 setjmp 或者 longjmp 结构体，goto 语句，以及直接或间接的递归调用。
       尽量避免：if else  , 递归等函数编写  ,卫语句

       第 2 条规则 — 循环设置固定的上限
       所有的循环必须有一个固定的上限。对于检查工具来说，在给定循环次数的情况下，可以通过静态分析证实循环结果不超过预设的上限。
       如果工具不能静态检测出循环上限，那么这条规则就不适用。

       第 3 条规则 — 没有动态内存分配
       初始化之后不要使用动态内存分配。

       第 4 条规则 — 没有大函数
       如果以一行一条声明和一行一条语句这样标准的格式来写，那么函数的长度不应该超过一张纸。这也就是说一个函数不应该超过 60 行代码。
       备注：单一职权原则

       第 5 条原则 — 低断言使用密度
       代码断言的密度应该低至平均每个函数两个。断言是用来检查现实执行中不会发生的不正常情况。它应该被定义为布尔测试。当断言失败，应当立即采取恢复措施。
       如果静态检测工具证明断言永远不会失败或者条件永远不为真，这条规则就无效。

       第 6 条规则 — 最小范围内声明数据对象
       这条规则支持数据隐藏的基本原则。所有的数据对象必须在尽可能最小范围内声明。
       备注：变量的作用域最小

       第 7 条规则 — 检查参数和返回值
       当函数的返回值为非空的时候，每次函数调用都应该检查其返回值，并且每个被调用的函数还要检查所带参数的有效性。
       在最严格的模式下，这条规则意味着printf和文件关闭语句的返回值也要检查

       第 8 条规则 — 限制使用预处理器

       第 9 条规则 — 限制使用指针

       第 10 条规则 — 所有代码必须能编译通过

       从开发的第一天起，所有的代码都必须通过编译。所有的编译器警告必须遵循编译器可使用警告。在编译器可使用警告范围内，编译的代码必须没有警告。
       所有代码必须每天至少使用一个（最好多于一个）最新的静态源代码分析器进行检查，而且以0警告通过所有的分析。

       备注：1）intellij Idea 软件本身带有警告信息 2）可以使用FindBugs-IDEA检查错误。3）rebuild product下
    */




    }

}

//参考文章：
//【1】http://blog.jobbole.com/104016/